<?php
/** ================================
 *  Intellect Board 3
 *  http://intblite.ru
 *  Модуль отображения стандартного раздела-форума
 *
 *  ================================ */

require_once('modules/uniforum.php');

class stdforum extends Uniforum {

  function  __construct($data=false,$mode=0) {
    parent::__construct($data, $mode);
    $this->data['type_id']=1;
  }


  function action_view($page=1) {
    // Выполняемые действия:
    // Выборка всех подразделов типа "форум" (всех подтипов), не имеющих статуса "удален" с сортировкой по полю сортировки;
    // Формирование заголовков разделов из файлов hdr_имяподтипа
    // TODO: подсчет статистики по всем подразделам, если страница корневая
    // TODO: выдача тем текущего подраздела, если страница не корневая
    //
    global $app;
    /* Эта часть осталась от процедуры вывода подразделов, которая будет сделана позже
     * $sql = 'SELECT o.*, ot.module, ot.subtype  FROM '.DB_prefix.'object o, '.DB_prefix.'object_type ot '.
            ' WHERE o.type_id=ot.id AND o.url LIKE "'.$app->slashes($this->data['url']).'/%"'.
            ' AND ot.module="forum"'.
            ' ORDER BY floatsort';
        $forums = $app->db->select_all($sql);
        $flist = array();
        for ($i=0, $count=count($forums); $i<$count; $i++) {
            $curforum = new Html('hdr_'.$forums[$i]['subtype'],$forums[$i]['module']);
            $curforum->set('forum',$forums[$i]);
            $flist[]=$curforum;
        }
         *
    */
    
    $totals = $this->data['subitems']; // количество отображаемых сообщений в теме
    $direction = $this->get_opt_recursive('topic_direction',0);  // направление сортировки (по умолчанию сортировка прямая)
    $perpage = $this->get_opt_recursive('topic_perpage',20); // количество сообщений на странице
    $pagedata = $this->get_pages($totals,$page,$perpage,$direction); // формируем информацию о страницах, смещении и кол-ве страниц

    if ($pagedata===false) return false;

    $topics=Module::get_objects('url LIKE "'.$app->slashes($this->data['url'].'/%').'"', 'lastmod DESC'); // TODO: подумать над тем, как передавать количество и выводить время последнего ответа.
    $result = new Html('forum','stdforum');

    $result->set('data',$this->data); // выводим общую информация о теме
    $result->set('pagedata',$pagedata); // выводим информацию о разбиении на страницы

    $result->set('topics',$topics); // получаем и выводим сами сообщения

    $this->fix_view(); // фиксируем просмотр темы пользователем (увеличение счетчика, фиксация даты последнего просмотра и т.п.)

    // Проверка модераторских действий
    $moderate=$app->user->check_access('moderate');
    $result->set('moderate',$moderate);
    //TODO: получение кол-ва сообщений на премодерации и в корзине

    //TODO: подумать, как сделать вывод объявлений
    //TODO: ссылка на правила форума
    //TODO: вывод опроса, если есть

    // показ кнопок ответа и новой темы, если у пользователя есть права
    $newtopic = $app->user->check_access('newobject');
    $result->set('newtopic',$newtopic);

    return $result;
  }

  /** Действие по созданию новой темы в разделе **/
  function action_newtopic() {
    global $app;
    $errors=array();
    if ($app->is_post()) { // если форму уже заполнили
      $app->load_module('topic',true); // подгружаем модуль темы
      $newtopic = new topic($_POST['topic']); // создаем новый экземпляр класса тема

      /*===============================================================*/
/*      $newtopic->data['type_id']=65; // ЭТО ТОЛЬКО ВРЕМЕННО! ПОТОМ БУДЕМ ЗАДАВАТЬ В КОНСТРУКТОРЕ!!!
      $newtopic->data['subitems']=0;
      $newtopic->data['posts']=1;
      $newtopic->data['template_id']=$this->data['template_id'];*/
      /*===============================================================*/

      $postdata=$newtopic->set_post($_POST['post'],1);
      $errors = array_merge($newtopic->validate_object(), $newtopic->validate_post($postdata));
      if (empty($errors)) { // если ошибок при проверке темы и сообщения не возникло
        $time=time();
        $newtopic->save_object($this);
//        if (isset($_POST['post']['text2'])) unset($_POST['text2']); // если была попытка вбросить комментарий модератора
        $newtopic->save_post($postdata);
        $this->update_objects($app->objparents,$time,1,1);
        $app->message('Новая тема успешно создана.',1);
        $app->status=301;
        $app->location=$app->hurl($newtopic->data['url']); // и переходим к новой теме
        return false;
      }
    }
    else {
      $app->load_module('topic',true); // подгружаем модуль темы
      $newtopic = new topic; // создаем новый экземпляр класса тема
      $postdata=$newtopic->set_post(false); // выставляем настройки по умолчанию для сообщения
    }
    $result = new Html('newtopic','stdforum');
    $allow_newtopic = $app->user->check_access('newobject');
    $result->set('newtopic',$allow_newtopic);
    $result->set('data',$this->data); // TODO: подумать, а нужно ли вообще?
    $result->set('errors',$errors); // сообщения об ошибках, возникших при отправке темы
    $result->set('topic',$newtopic->data);
    $result->set('post',$postdata);
    return $result;
  }

  /** Описание текущего действия в строке навигации **/
  function get_location($action) {
    if ($action=='newtopic') return 'Создание новой темы';
    else return false;
  }

}
